import isEmpty from 'loadsh/isEmpty'
import {
  URL_GET_LEAVLE,
  URL_GET_EVECTION,
  URL_GET_USER_INFO_BY_ID,
  URL_GET_PROCURE_APPLICATION,
  URL_GET_PROCUREMENT_CONFIRMATION,
  URL_POST_STATUS_CHANGE,
  URL_POST_DELETE_DATA,
  URL_GET_INFO_BY_ID,
  URL_GET_INFO_PICTURE,
  URL_POST_INFO_PICTURE,
  URL_POST_LEAVLE,
  URL_POST_EVECTION,
  URL_POST_PROCURE_APPLICATION,
  URL_POST_PROCUREMENT_CONFIRMATION,
  URL_POST_SEAL,
  URL_GET_SEAL,
  URL_GET_TOPIC,
  URL_POST_TOPIC,
  URL_GET_MEETING,
  URL_POST_MEETING,
  URL_GET_CONTRACT,
  URL_POST_CONTRACT,
  URL_GET_MEETING_LOG,
  URL_POST_MEETING_LOG,
  URL_GET_INVOICING,
  URL_GET_ISSUERECEIPT,
  URL_GET_EXPENSEACCOUNT,
  URL_GET_PAYMENTFUNCTION,
  URL_GET_PROJECTARCHIVING,
  URL_POST_ISSUERECEIPT,
  URL_POST_INVOICING,
  URL_POST_EXPENSEACCOUNT,
  URL_POST_PAYMENTFUNCTION,
  URL_POST_PROJECTARCHIVING,
  URL_GET_TAPEOUTBUSINESS,
  URL_POST_TAPEOUTBUSINESS,
  URL_GET_GOODSID,
  URL_GET_EQUIPMENTLOGBYID,
  URL_GET_ORDERMANGEMENT,
  URL_POST_ORDERMANGEMENT,
  URL_GET_CONSUMABLESMANGEMENT,
  URL_POST_CONSUMABLESMANGEMENT,
  URL_GET_CHIPPAYMENTUNIT,
  URL_GET_CHIPPAYMENTBANK,
  URL_GET_CHIPPAYMENTACCOUNT,
  URL_GET_CHIPPAYMENTNUMBER,
  URL_POST_GOODSINFO,
} from "./_constUrl";

/**
 * 发起 HTTP 请求的基础函数
 * @param {Object} options - 请求配置对象
 * @param {string} options.url - 请求地址
 * @param {function} options.success - 请求成功时的回调函数
 * @param {string} [options.method='GET'] - 请求方法，默认为 GET
 * @param {Object} [options.data={}] - 请求数据
 * @param {function} [options.fail=() => {}] - 请求失败时的回调函数
 * @param {function} [options.complete=() => {}] - 请求完成时的回调函数
 * @param {Object} [options.headers={}] - 请求头部配置
 */
export function BaseHttpRequest({
  url,
  success = () => {},
  method = "GET",
  data = {},
  fail = () => { },
  complete = () => { },
  headers = {},
}) {
  my.httpRequest({
    url,
    headers: {
      "content-type": "application/json",
      ...headers,
    },
    method,
    data,
    timeout: 30000,
    success:(res) => {
      // console.log(res);
      if(res.data.statusCode !== 200) {
        console.warn(res.data);
        my.alert({content:"ERROR!",title:res.data.statusCode})
      }else {
        success(res)
      }
    },
    fail: (error) => {
      // my.alert({
      //   title: "请求失败！",
      //   content: "详情请查看控制台输出！",
      // });
      console.warn(error);
      fail();
    },
    complete: () => {
      // console.log("请求完成！");
      complete();
    },
  });
}

/**
 * 根据 ID 获取信息
 * @param {string} id - 数据 ID
 * @param {function} success - 请求成功时的回调函数
 */
export function GetInfoById(id, success) {
  BaseHttpRequest({
    url: URL_GET_INFO_BY_ID + id,
    success,
  });
}

/**
 * 根据用户 ID 获取用户信息
 * @param {string} id - 用户 ID
 * @param {function} success - 请求成功时的回调函数
 */
export function GetUserInfoById(id, success) {
  if (!isEmpty(id)) {
    BaseHttpRequest({
      url: URL_GET_USER_INFO_BY_ID + id,
      success,
    });
  }
}

/**
 * 修改状态
 * @param {string} id - 数据 ID
 * @param {number} status - 状态
 * @param {string} table - 表名
 * @param {function} success - 请求成功时的回调函数
 */
export function PostStatusChange(id, status, table, success = () => { }) {
  BaseHttpRequest({
    url: URL_POST_STATUS_CHANGE + id + '/' + status + '/' + table,
    method: "POST",
    success,
  });
}


/**
 * 删除数据
 * @param {string} id - 数据 ID
 * @param {string} table - 表名
 * @param {function} success - 请求成功时的回调函数
 */
export function PostDeleteData(id, table, success, fail) {
  BaseHttpRequest({
    url: URL_POST_DELETE_DATA + id + '/' + table,
    method: "POST",
    success,
    fail,
  });
}


/**
 * 获取请假信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetLeaveInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_LEAVLE + userId,
    success,
  });
}

/**
 * 提交请假信息
 * @param {function} success - 请求成功时的回调函数
 * @param {function} fail - 请求失败时的回调函数
 * @param {string} [data] - 数据传输
 */
export function PostLeaveInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_LEAVLE,
    method: "POST",
    data,
    success,
    fail
  })
}

/**
 * 获取出差信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetEvectionInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_EVECTION + userId,
    success,
  });
}

/**
 * 提交出差信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [data] - 数据传输
 */
export function PostEvectionInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_EVECTION,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取采购申请信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetProcureApplicationInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_PROCURE_APPLICATION + userId,
    success,
  });
}

/**
 * 提交采购申请信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [data] - 数据传输
 */
export function PostProcureApplicationInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_PROCURE_APPLICATION,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取采购确认信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetProcurementConfirmationInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_PROCUREMENT_CONFIRMATION + userId,
    success,
  });
}

/**
 * 获取采购确认信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [data] - 数据传输
 */
export function PostProcurementConfirmationInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_PROCUREMENT_CONFIRMATION,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取用印信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetSealInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_SEAL + userId,
    success,
  });
}

/**
 * 提交用印
 * @param {Object} seal - 用印信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostSealInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_SEAL,
    method: "POST",
    data,
    success,
    fail
  });
}


/**
 * 获取议题信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetTopicInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_TOPIC + userId,
    success,
  });
}

/**
 * 提交议题
 * @param {Object} topic - 主题信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostTopicInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_TOPIC,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取会议信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetMeetingLogInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_MEETING_LOG + userId,
    success,
  });
}

/**
 * 提交会议
 * @param {Object} meeting - 会议信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostMeetingLogInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_MEETING_LOG,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取合同信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetContractInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_CONTRACT + userId,
    success,
  });
}

/**
 * 提交合同
 * @param {Object} contract - 合同信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostContractInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_CONTRACT,
    method: "POST",
    data,
    success,
    fail
  });
}



/**
 * 获取会议室信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetMeetingRoomInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_MEETING + userId,
    success,
  });
}

/**
 * 提交会议室
 * @param {Object} meetingroom - 会议信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostMeetingRoomInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_MEETING,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取开票信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetInvoicInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_INVOICING + userId,
    success,
  });
}

/**
 * 提交开票信息
 * @param {Object} Invoic - 开票信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostInvoicInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_INVOICING,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取开收据信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetIssueReceiptInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_ISSUERECEIPT + userId,
    success,
  });
}

/**
 * 提交开收据信息
 * @param {Object} ISSUERECEIPT - 开收据信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostIssueReceiptInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_ISSUERECEIPT,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取报销信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetExpenseAccountInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_EXPENSEACCOUNT + userId,
    success,
  });
}

/**
 * 提交报销信息
 * @param {Object} EXPENSEACCOUNT - 报销信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostExpenseAccountInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_EXPENSEACCOUNT,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取付款信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetPaymentFunctionInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_PAYMENTFUNCTION + userId,
    success,
  });
}

/**
 * 提交付款信息
 * @param {Object} PAYMENTFUNCTION - 付款信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostPaymentFunctionInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_PAYMENTFUNCTION,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取资料归档信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetProjectArchivingInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_PROJECTARCHIVING + userId,
    success,
  });
}

/**
 * 提交资料归档信息
 * @param {Object} PROJECTARCHIVING - 资料归档信息对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostProjectArchivingInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_PROJECTARCHIVING,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取流片付款信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetTapeoutPaymengtInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_TAPEOUTBUSINESS + userId,
    success,
  });
}

/**
 * 提交流片付款信息
 * @param {Object} TapeoutPaymengt - 流片付款对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostTapeoutPaymengtInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_TAPEOUTBUSINESS,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取收款单位名称信息
 * @param {function} success - 请求成功时的回调函数
 */
export function GetchipPaymentUnitInfo(success) {
  BaseHttpRequest({
    url: URL_GET_CHIPPAYMENTUNIT,
    success,
  });
}
/**
 * 获取开户行信息
 * @param {function} success - 请求成功时的回调函数
 */
export function GetchipPaymentBankInfo(success) {
  BaseHttpRequest({
    url: URL_GET_CHIPPAYMENTBANK,
    success,
  });
}

/**
 * 获取银行账号信息
 * @param {function} success - 请求成功时的回调函数
 */
export function GetchipPaymentAccountInfo(success) {
  BaseHttpRequest({
    url: URL_GET_CHIPPAYMENTACCOUNT,
    success,
  });
}

/**
 * 获取流片合同编号
 * @param {function} success - 请求成功时的回调函数
 */
export function GetchipPaymentNumberInfo(success) {
  BaseHttpRequest({
    url: URL_GET_CHIPPAYMENTNUMBER,
    success,
  });
}

/**
 * 获取样品id信息
 * @param {function} success - 请求成功时的回调函数
 */
export function GetGoodsIdInfo(success) {
  BaseHttpRequest({
    url: URL_GET_GOODSID,
    success,
  });
}

/**
 * 获取操作设备id信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetEquipmentLogbyIdInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_EQUIPMENTLOGBYID + userId,
    success,
  });
}

/**
 * 提交样品操作信息
 * @param {Object} DEVICEMANGEMENT - 样品操作对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostGoodInfo(id, info,operate) {
  BaseHttpRequest({
    url: URL_POST_GOODSINFO + id + '/' + info + '/' + operate,
    method: "POST",
  });
}

/**
 * 获取订单管理信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetOrderManagementInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_ORDERMANGEMENT + userId,
    success,
  });
}

/**
 * 提交订单管理信息
 * @param {Object} OrderManagement - 订单管理对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostOrderManagementInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_ORDERMANGEMENT,
    method: "POST",
    data,
    success,
    fail
  });
}

/**
 * 获取耗材管理信息
 * @param {function} success - 请求成功时的回调函数
 * @param {string} [userId='ALL'] - 用户 ID，默认为 'ALL'
 */
export function GetConsumablesManagementInfo(success, userId = "ALL") {
  BaseHttpRequest({
    url: URL_GET_CONSUMABLESMANGEMENT + userId,
    success,
  });
}

/**
 * 提交耗材管理信息
 * @param {Object} OrderManagement - 耗材管理对象
 * @param {function} success - 请求成功时的回调函数
 */
export function PostConsumablesManagementInfo(data, success, fail) {
  BaseHttpRequest({
    url: URL_POST_CONSUMABLESMANGEMENT,
    method: "POST",
    data,
    success,
    fail
  });
}


/**
 * 根据 ID 下载图片
 * @param {string} id - 数据 ID
 * @param {function} success - 请求成功时的回调函数
 */
export function GetInfoPicture(id, success) {
  my.downloadFile({
    url: URL_GET_INFO_PICTURE + id,
    success,
  });
}
/**
 * 展示图片
 * @param {string[]} path 
 */
export function GetPreviewImage(path) {
  my.previewImage({
    urls: [...path]
  });
};
/**
 * 上传图片
 * @param {string} id - 数据 ID
 * @param {function} success - 请求成功时的回调函数
 */
export function PostInfoPicture(filePath, success) {
  my.uploadFile({
    url: URL_POST_INFO_PICTURE,
    filePath: filePath,
    name: 'files',
    fileType: 'image',
    success,
  });
}


